//
//  SwiftJavaScript.swift
//  TopStock
//
//  Created by dyd on 2017/8/18.
//  Copyright © 2017年 dyd. All rights reserved.
//

import Foundation
import JavaScriptCore

protocol JavaScriptModelDelegate:NSObjectProtocol{
    func JavaScriptCallBackFunc(jsonDic:NSDictionary?,modelContext:JSContext,eventType:JSEventType)
}

@objc protocol SwiftJavaScriptDelegate: JSExport {
    
    func openUrl(_ json:String)//新开网页
    func getCamerra(_ json:String)//唤起摄像头
    func getNetStatus(_ json:String)//查看当前网络状态
    func getUser(_ json:String)//获取当前用户
    func getUserLogin(_ json:String)//唤起用户登陆
    func getUserLogout(_ json:String)//用户退出登陆
    func getUserEditPassword(_ json:String)//唤起修改密码
    func setSheet(_ json:String)//唤起下拉选择框
    func setSheetTime(_ json:String)//唤起时间下拉选择框
    func setSheetDate(_ json:String)//唤起日期下拉选择框
    func setAlert(_ json:String)//消息提示框
    func getQRcode(_ json:String)//二维码扫描
    
    //Totast
    func setTotast(_ json:String)//载入/完成/错误/取消
    func closeTotast(_ json:String)//关闭Totast
    
    //分享
    func setShare(_ json:String)//分享
    func openCalendar(_ json:String)//打开日历
    func setHelpInterface(_ json:String)//帮助文字
    func setTitle(_ json:String)//设置标题
    
    //缓存
    func getCache(_ json:String)//获取缓存大小
    func clearCache(_ json:String)//清除缓存
    
    //拨号
    func openTel(_ json:String)//打电话
    func getPushId(_ json:String)//获取推送id
    
    //剪切板
    func getClipBoard(_ json:String)//获取剪切板内容
    func setClipBoard(_ json:String)//设置剪切板内容
    
    //打开视频
    func openVideo(_ json:String)//打开视频
    
    //设置横竖屏幕
    func setOrientation(_ json:String)
    
    
    func cofirm(_ json:String)
    
}

@objc class SwiftJavaScriptModel: NSObject, SwiftJavaScriptDelegate {
    
    weak var jsModelContext: JSContext?
    var delegate:JavaScriptModelDelegate!
    
    //MARK: - Action func
    //MARK: -新开网页
    func openUrl(_ json:String){
        delegate.JavaScriptCallBackFunc(jsonDic:jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .OpenUrl)
    }
    //MARK: -唤起摄像头
    func getCamerra(_ json:String){
        delegate.JavaScriptCallBackFunc(jsonDic:jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .Camerra)
    }
    //MARK: -查看当前网络状态
    func getNetStatus(_ json:String){
        delegate.JavaScriptCallBackFunc(jsonDic: jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .NetStatus)
    }
    //MARK: -获取当前用户
    func getUser(_ json:String){
        delegate.JavaScriptCallBackFunc(jsonDic:jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .UserInfo)
    }
    //MARK: -唤起用户登陆
    func getUserLogin(_ json:String){
        delegate.JavaScriptCallBackFunc(jsonDic:jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .UserLogin)
    }
    //MARK: -用户退出登陆
    func getUserLogout(_ json:String)
    {
        delegate.JavaScriptCallBackFunc(jsonDic:jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .GetUserLogout)
    }
    
    //MARK: -唤起修改密码
    func getUserEditPassword(_ json:String)
    {
        delegate.JavaScriptCallBackFunc(jsonDic:jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .GetUserEditPassword)
    }
    //MARK: -唤起下拉选择框
    func setSheet(_ json:String){
        delegate.JavaScriptCallBackFunc(jsonDic:jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .Sheet)
    }
    //MARK: -唤起时间下拉选择框
    func setSheetTime(_ json:String){
        delegate.JavaScriptCallBackFunc(jsonDic:jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .SheetTime)
    }
    //MARK: -唤起日期下拉选择框
    func setSheetDate(_ json:String){
        delegate.JavaScriptCallBackFunc(jsonDic:jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .SheetDate)
    }
    //MARK: -消息提示框
    func setAlert(_ json:String){
        delegate.JavaScriptCallBackFunc(jsonDic:jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .Alert)
    }
    //MARK: -二维码扫描
    func getQRcode(_ json:String){
        delegate.JavaScriptCallBackFunc(jsonDic:jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .QRcode)
    }
    
    //MARK: -setTotast
    func setTotast(_ json:String)
    {
        let jsonData:Data = json.data(using: .utf8)!
        let dict = try? JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) as! NSDictionary
        let typeStr = dict?["type"] as! String
        switch typeStr{
        case "LOADING":
            print("LOADING")
            delegate.JavaScriptCallBackFunc(jsonDic: jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .TOTAST_LOADING)
        case "SUCCESS":
            print("SUCCESS")
            delegate.JavaScriptCallBackFunc(jsonDic: jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .TOTAST_SUCCESS)
        case "ERROR":
            print("ERROR")
            delegate.JavaScriptCallBackFunc(jsonDic: jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .TOTAST_ERROR)
        case "CANCEL":
            print("CANCEL")
            delegate.JavaScriptCallBackFunc(jsonDic: jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .TOTAST_CANCEL)
        default:
            break
        }
    }
    
    //MARK: -关闭Totast
    func closeTotast(_ json:String)
    {
        delegate.JavaScriptCallBackFunc(jsonDic: jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .TOTAST_CLOSE)
    }
    
    
    //MARK: -分享
    func setShare(_ json:String){
        delegate.JavaScriptCallBackFunc(jsonDic: jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .Share)
    }
    //MARK: -打开日历
    func openCalendar(_ json:String){
        delegate.JavaScriptCallBackFunc(jsonDic: jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .OpenCalenda)
    }
    //MARK: -帮助文字
    func setHelpInterface(_ json:String){
        delegate.JavaScriptCallBackFunc(jsonDic: jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .HelpInterface)
    }
    //MARK: -设置标题
    func setTitle(_ json:String){
        delegate.JavaScriptCallBackFunc(jsonDic: jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .SetTitle)
    }
    
    //MARK: -获取缓存大小
    func getCache(_ json:String){
        delegate.JavaScriptCallBackFunc(jsonDic: jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .GetCache)
    }
    //MARK: -清除缓存
    func clearCache(_ json:String){
        delegate.JavaScriptCallBackFunc(jsonDic:jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .ClearCache)
    }
    //MARK: -打电话
    func openTel(_ json:String){
        delegate.JavaScriptCallBackFunc(jsonDic: jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .OpenTel)
    }
    //MARK: -获取推送id
    func getPushId(_ json:String){
        delegate.JavaScriptCallBackFunc(jsonDic: jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .GetPushId)
    }
    
    //MARK: -获取剪切板内容
    func getClipBoard(_ json:String)
    {
        delegate.JavaScriptCallBackFunc(jsonDic: jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .GetClipBoard)
    }
    
    //MARK: -设置剪切板内容
    func setClipBoard(_ json:String)
    {
        delegate.JavaScriptCallBackFunc(jsonDic: jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .SetClipBoard)
    }
    
    //MARK: -打开视频
    func openVideo(_ json:String)
    {
        delegate.JavaScriptCallBackFunc(jsonDic: jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .OpenVideo)
    }
    
    func cofirm(_ json:String)
    {
        print("cofirm")
    }
    
    //MARK: -设置横竖屏幕
    func setOrientation(_ json:String)
    {
        delegate.JavaScriptCallBackFunc(jsonDic: jsonStrParsing(json: json), modelContext: jsModelContext!,eventType: .SetOrientation)
    }
    
    
    //解析JSON字符串
    func jsonStrParsing(json:String) ->NSDictionary?
    {
        let jsonData:Data = json.data(using: .utf8)!
        let dict = try? JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) as! NSDictionary
//        let jsFuncStr = dict?["jsFn"]
        return dict
    }
    
}
